閉まっている。この質問には詳細または明確さが必要です。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して、詳細を追加し、問題を明確にしてください。 1年前に閉店しました。 この質問を改善する コードチャレンジを行っていますが、開始インデックスを指定し、開始インデックスから最初の(3または任意の長さの)値のみを取得して、配列から最初の3つの値を取得したいと考えています。 このコードを試してみましたが、機能していますが、コード構造が長すぎるため、これを短くして理解しやすくする方法を教えてください。 int n = 10; 二重署名=新しいdouble [] {1、1、1}; double [] ret = new double [n]; 二重和= 0; ret [0] =署名[0]; ret [1] =署名[1]; ret [2] =署名[2]; int x、i; for(i = 0; i
2021-01-31 08:20:14
LINQを使用すると、次のようなことを試すことができます。 var values = array.Skip(index) .Take(n) .ToArray(); ここで、indexは最初のアイテムのインデックスであり、nは選択するアイテムの数です。 例えば。 https://dotnetfiddle.net/Pk1rwY 補足として。 LINQを使用しても、コードが高速になるわけではありません。よりコンパクトで読みやすくなります。コードのパフォーマンスを評価するには、BenchmarkDotNetなどを使用する必要があります。 | Linqソリューションなし: private static T [] Extract(T [] source、int fromIndex、int length){ if(null ==ソース) 新しいArgumentNullException(nameof(source));をスローします。 else if(fromIndex <0) 新しいArgumentOutOfRangeException(nameof(fromIndex)、 "インデックスからは負でない必要があります"); else if(長さ<0) 新しいArgumentOutOfRangeException(nameof(length)、 "長さは負でない必要があります"); if(fromIndex> = source.Length || length == 0) 新しいT [0]を返します。 T []結果=新しいT [Math.Min(length、source.Length-fromIndex)]; Array.Copy(source、fromIndex、result、0、result.Length); 結果を返します。 } 次に double []署名=新しいdouble [] {0、1、2、3、4、5}; double [] ret = Extract(signature、3、2); Console.Write(string.Join( "、"、ret)); 結果: 3、4 | あなたの質問から、あなたは演算子.Takeと.Skipを利用する必要があります。 var result = array.Skip(startingIndex).Take(numberOfElements); したがって、コードからは、要素の合計など、少し異なることをしようとしているようです。ここでは、.Sum演算子が役立つ場合があります。 | あなたが探している答えではありませんか? c#arrays linqとタグ付けされた他の質問を参照するか、独自の質問をしてください。